from PyQt6.QtWidgets import (QMainWindow, QTabWidget, QWidget, QVBoxLayout, QHBoxLayout,
                             QPushButton, QLineEdit, QTextEdit, QLabel, QProgressBar, QFileDialog)
from PyQt6.QtGui import QFont, QColor, QPixmap
from PyQt6.QtCore import Qt
from config import Config
from global_vars import global_vars
from text_processor import TextProcessor
from single_char_processor import SingleCharProcessor

class MainUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.text_processor = TextProcessor()  # 文本处理实例
        self.single_char_processor = SingleCharProcessor()  # 单字处理实例
        self.init_ui()  # 初始化界面

    def init_ui(self):
        # 1. 窗口基础设置
        self.setWindowTitle("小学生汉字转拼音助手")
        self.resize(1000, 700)
        self.setStyleSheet(f"background-color: #F8FAFF;")  # 柔和背景色

        # 2. 中心部件与Tab布局（分“单字学习”“文本处理”“历史记录”）
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        main_layout = QVBoxLayout(central_widget)
        self.tab_widget = QTabWidget()
        main_layout.addWidget(self.tab_widget)

        # 3. 初始化三个Tab页面
        self.init_single_char_tab()  # 单字学习Tab
        self.init_text_process_tab()  # 文本处理Tab
        self.init_history_tab()       # 历史记录Tab

        # 4. 全局字体设置（卡通风格）
        main_font = QFont(Config.FONT_MAIN, Config.FONT_SIZE_DEFAULT)
        self.setFont(main_font)

    def init_single_char_tab(self):
        """初始化“单字学习”Tab页面"""
        tab = QWidget()
        layout = QVBoxLayout(tab)

        # （1）输入区：输入单个汉字
        input_layout = QHBoxLayout()
        input_label = QLabel("输入汉字：")
        input_label.setStyleSheet(f"color: {Config.MAIN_COLOR}; font-weight: bold;")
        self.single_char_input = QLineEdit()
        self.single_char_input.setMaxLength(1)  # 限制仅输入1个字符
        self.single_char_input.setPlaceholderText("例如：好")
        # 查询按钮（卡通风格）
        query_btn = QPushButton("查询")
        query_btn.setStyleSheet(f"""
            background-color: {Config.ASSIST_COLOR}; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 8px 16px;
        """)
        query_btn.clicked.connect(self.on_single_char_query)  # 绑定查询事件

        input_layout.addWidget(input_label)
        input_layout.addWidget(self.single_char_input)
        input_layout.addWidget(query_btn)
        layout.addLayout(input_layout)

        # （2）展示区：米字格、拼音、笔画
        display_layout = QHBoxLayout()
        # 米字格（初始显示空白图片，查询后加载）
        self.rice_grid_label = QLabel()
        self.rice_grid_label.setFixedSize(200, 200)
        self.rice_grid_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        # 拼音与笔画展示
        info_layout = QVBoxLayout()
        self.pinyin_label = QLabel("拼音：——")
        self.pinyin_label.setStyleSheet(f"font-size: 20px; color: {Config.MAIN_COLOR};")
        self.stroke_label = QLabel("笔画：——")
        self.stroke_label.setStyleSheet(f"font-size: 16px; color: #333;")
        # 发音按钮
        audio_btn = QPushButton("播放发音")
        audio_btn.setStyleSheet(f"""
            background-color: {Config.MAIN_COLOR}; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 6px 12px;
        """)
        audio_btn.clicked.connect(self.on_play_audio)  # 绑定发音事件

        info_layout.addWidget(self.pinyin_label)
        info_layout.addWidget(self.stroke_label)
        info_layout.addWidget(audio_btn)
        display_layout.addWidget(self.rice_grid_label)
        display_layout.addLayout(info_layout)
        layout.addLayout(display_layout)

        self.tab_widget.addTab(tab, "单字学习")

    def init_text_process_tab(self):
        """初始化“文本处理”Tab页面"""
        tab = QWidget()
        layout = QVBoxLayout(tab)

        # （1）导入/输入区
        input_layout = QHBoxLayout()
        import_btn = QPushButton("导入docx/txt文件")
        import_btn.setStyleSheet(f"""
            background-color: {Config.MAIN_COLOR}; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 8px 16px;
        """)
        import_btn.clicked.connect(self.on_import_file)  # 绑定导入事件
        input_layout.addWidget(import_btn)
        layout.addLayout(input_layout)

        # （2）文本编辑区
        self.text_edit = QTextEdit()
        self.text_edit.setPlaceholderText("请输入文本或导入文件（支持docx/txt）...")
        layout.addWidget(self.text_edit)

        # （3）处理与打印按钮区
        btn_layout = QHBoxLayout()
        process_btn = QPushButton("转换为拼音文本")
        process_btn.setStyleSheet(f"""
            background-color: {Config.ASSIST_COLOR}; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 8px 16px;
        """)
        process_btn.clicked.connect(self.on_process_text)  # 绑定转换事件

        print_btn = QPushButton("打印预览")
        print_btn.setStyleSheet(f"""
            background-color: #28A745; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 8px 16px;
        """)
        print_btn.clicked.connect(self.on_print_preview)  # 绑定打印事件

        btn_layout.addWidget(process_btn)
        btn_layout.addWidget(print_btn)
        layout.addLayout(btn_layout)

        # （4）进度条（大文件处理时显示）
        self.progress_bar = QProgressBar()
        self.progress_bar.setValue(0)
        self.progress_bar.setVisible(False)  # 初始隐藏
        layout.addWidget(self.progress_bar)

        self.tab_widget.addTab(tab, "文本处理")

    def init_history_tab(self):
        """初始化“历史记录”Tab页面（简化实现，显示记录列表）"""
        tab = QWidget()
        layout = QVBoxLayout(tab)

        self.history_list = QTextEdit()
        self.history_list.setReadOnly(True)
        self.history_list.setPlaceholderText("暂无历史记录...")
        layout.addWidget(self.history_list)

        # 刷新历史记录按钮
        refresh_btn = QPushButton("刷新历史记录")
        refresh_btn.setStyleSheet(f"""
            background-color: {Config.MAIN_COLOR}; 
            color: white; 
            border-radius: {Config.BUTTON_RADIUS}px; 
            padding: 8px 16px;
        """)
        refresh_btn.clicked.connect(self.refresh_history)  # 绑定刷新事件
        layout.addWidget(refresh_btn)

        self.tab_widget.addTab(tab, "历史记录")

    # ------------------- 按钮点击事件 -------------------
    def on_single_char_query(self):
        """单字查询事件：调用单字处理器，更新界面展示"""
        char = self.single_char_input.text().strip()
        if not char:
            self.pinyin_label.setText("拼音：请输入汉字！")
            return
        # 调用单字处理器获取结果（拼音、笔画、米字格）
        result = self.single_char_processor.process_single_char(char)
        if result:
            self.pinyin_label.setText(f"拼音：{result['pinyin']}")
            self.stroke_label.setText(f"笔画：{''.join(result['strokes'])}（共{len(result['strokes'])}画）")
            # 加载米字格图片（此处简化，实际需生成/加载米字格资源）
            self.rice_grid_label.setPixmap(QPixmap("./rice_grid.png").scaled(200, 200, Qt.AspectRatioMode.KeepAspectRatio))
            # 更新全局变量
            global_vars.current_content = char
            global_vars.conversion_result = [{"char": char, "pinyin": result['pinyin'], "strokes": result['strokes']}]

    def on_play_audio(self):
        """播放发音事件：调用单字处理器的发音功能"""
        if not global_vars.current_content:
            self.pinyin_label.setText("拼音：请先查询汉字！")
            return
        self.single_char_processor.play_audio(global_vars.current_content)

    def on_import_file(self):
        """导入文件事件：选择docx/txt文件，读取内容到文本编辑区"""
        file_path, _ = QFileDialog.getOpenFileName(self, "选择文件", "", "Text Files (*.txt);;Word Files (*.docx)")
        if file_path:
            content = self.text_processor.read_file(file_path)
            self.text_edit.setText(content)
            global_vars.current_content = content

    def on_process_text(self):
        """文本转换事件：调用文本处理器，处理内容并更新进度"""
        content = self.text_edit.toPlainText().strip()
        if not content:
            self.text_edit.setPlaceholderText("请输入文本后再转换！")
            return
        # 检查是否为大文件，显示进度条
        if len(content) > Config.MAX_SINGLE_PROCESS:
            self.progress_bar.setVisible(True)
            # 绑定进度更新函数（文本处理器处理时会调用）
            self.text_processor.set_progress_callback(self.update_progress)
        # 处理文本
        result = self.text_processor.process_text(content)
        # 处理完成后隐藏进度条
        self.progress_bar.setVisible(False)
        self.progress_bar.setValue(0)
        # 更新文本编辑区为转换结果（汉字+拼音排版）
        self.text_edit.setText(self.text_processor.format_result_for_display(result))
        global_vars.conversion_result = result

    def on_print_preview(self):
        """打印预览事件：简化实现，实际需调用Qt的打印预览功能"""
        if not global_vars.conversion_result:
            self.text_edit.setPlaceholderText("请先转换文本再打印！")
            return
        # 此处简化，实际需使用QPrintPreviewDialog实现预览
        print("打开打印预览（实际项目中需集成Qt打印功能）")

    def refresh_history(self):
        """刷新历史记录：从全局变量读取记录并显示"""
        if not global_vars.history_records:
            self.history_list.setText("暂无历史记录...")
            return
        history_str = ""
        for i, record in enumerate(global_vars.history_records, 1):
            history_str += f"{i}. 类型：{record['type']} | 时间：{record['time']} | 内容：{record['content'][:20]}...\n"
        self.history_list.setText(history_str)

    def update_progress(self, progress):
        """更新进度条：文本处理器回调此函数"""
        self.progress_bar.setValue(progress)